#git #minigudes

#### Изменение описания коммита
В локальном репозитории:
```
$ git commit --amend -m "<New commit message>"

	<New commit message> - новое описание коммита
```
В удаленном репозитории:
1. Выполнить изменение описания коммита в локальном репозитории;
2. Обновить изменения в удаленном репозитории командой:
```
$ git push --force <remote_name> <branch_name>

	<remote_name> - имя удаленного репозитория
	<branch_name> - имя ветки для изменения сообщения коммита
```
#### Удаление ветки
В локальном репозитории:
```
$ git branch -d <branch_name>

	<branch_name> - имя удаляемой ветки
```
В удаленном репозитории:
```
$ git push <remote_name> --delete <branch_name>

	<remote_name> - имя удаленного репозитория
	<branch_name> - имя удаляемой ветки
```
#### Работа с тэгами
Посмотреть список тэгов:
```
$ git tag
```
Создать тэг:
```
$ git tag <tag_name>

	tag_name - имя создаваемого тэга
```
Загрузить тэги в удаленный репозиторий:
1. Выгрузить локальные изменения в удаленный репозиторий:
```
$ git push <remote_name> <branch_name>

	<remote_name> - имя удаленного репозитория
	<branch_name> - имя ветки с изменениями
```
2. Выгрузить тэги в удаленный репозиторий:
```
$ git push --tags
```
Удалить тэг локально:
```
$ git tag --delete <tag_name>

	<tag_name> - имя удаляемого тэга
```
Удалить тэг в удаленном репозитории:
```
$ git push --delete <remote_name> <tag_name>

	<remote_name> - имя удаленного репозитория
	<tag_name>    - имя удаляемого тэга
```
#### Вернуть изменения к определенному коммиту в локальном и удаленном репозиториях
Есть история 'A-B-C-D-E', head локально и удаленно находится на 'E'.
Нужно откатить изменения до 'C' и удалить изменения 'E' и 'D'.
1. Вернуть изменения к указанному коммиту локально:
```
$ git reset --hard <C>

	<C> - hash коммита до которого откатываются изменения
```
2. Вернуть изменения к указанному коммиту удаленно:
```
$ git push --force <remote_name> <branch_name>

	<remote_name> - имя удаленного репозитория
	<branch_name> - имя ветки
```
#### Удалить незакомиченные и проиндексированные изменения (зеленые сделать красными, не теряя изменения)
Для текущей папки:
```
$ git restore -S .
```
Для указанного файла:
```
$ git restore -S <path_to_file>

	<path_to_file> - путь к файлу, изменения которого отменяются
```
## Работа с удаленными репозиториями
#### Просмотр подключенных удаленных репозиториев
```
$ git remote -v
> origin https://hub.mos.ru/mirent/docs_and_guides.git (fetch)
> origin https://hub.mos.ru/mirent/docs_and_guides.git (push)
```
#### Добавление удаленного репозитория
```
$ git remote add <remote_name> https://hub.mos.ru/mirent/docs_and_guides_fork.git

	<remote_name> - имя подключаемого удаленного репозитория (пример: origin, upstream)
```
#### Удаление удаленного репозитория
##### Способ 1: с помощью команды
```
$ git remote remove <remote_name>

	<remote_name> - имя удаляемого репозитория
```
##### Способ 2: через редактирование файла настроек
1. В текстовом редактори открыть файл настроек текущего репозитория по пути:
```
<current_folder>/.git/config

	<current_folder> - текущая папка с проектом
```
2. Удалить секцию с подключенным удаленным репозиторием:
```
[remote "<remote_name>"]
		url = https://hub.mos.ru/mirent/docs_and_guides.git
        fetch = +refs/heads/*:refs/remotes/origin/*
	<remote_name> - имя удаляемого репозитория
```
3. Сохранить файл и выйти
#### Изменить текстовое сообщение последнего комментария
1. В консоли ввести команду:
```
$ git commit --amend
```
2. В открывшемся текстовом редакторе переключиться на английскую раскладку и нажать "i"
3. Отредактировать текст
4. Нажать Esc
5. Ввести :wq!
6. Нажать Enter для сохранения и выхода
#### Проблемы и решения
##### Ошибка при выполнении команды git push
Текст ошибки:
```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:cUpRikUQGan1+1LnA742R0AnpVjfHN/GWN+QZKaNhUw.
Please contact your system administrator.
Add correct host key in /c/Users/gemin/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /c/Users/gemin/.ssh/known_hosts:2
Host key for hub.mos.ru has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
Решение: удалить файлы `known_hosts` и `known_hosts.old`.
#### //TODO К разбору
Дополнительные команды по [ссылке](https://dev.to/eugenedorfling/how-to-manage-multiple-remote-repositories-with-git-terminal-ffp).
```
Git Alias
1. alias iy='I am go to scool today' - Создать alias "iy", вызов которого в командной строке: "git iy" выполнит команду: "I am go to scool today".  
git config --global alias.iy 'I am go to scool today'  
2. Удалить alias "iy".  
git config --global --unset [alias.il](http://alias.il/)  
3. Отредактировать файл конфигурации git.  
git config --global --edit  
4. Вернуться к прежней версии файла: git checkout <hash>  
5. Где "<hash>" это 7 цифр кода состояния изменений, полученные в результате команды "log" * fa3c141 2011-03-09 | Added HTML header (HEAD, master) [Alexander Shvets]  
6. Вернуться на последнюю рабочую ветку: "git checkout master".  
7. Назначить тэг текущей версии: "git tag <v1>", где <v1> - имя тэга.  
8. Переход к тэгу: "git checkout <v1>", где <v1> - имя тэга.  
9. Переход к предыдущему тэгу: "git checkout <v1>^".  
10. Просмотр всех тэгов: "git tag".  
11. vadim@Raven:~/git_tutorial/work$ git remote remove [https://github.com/VadMih/testing.git](https://github.com/VadMih/testing.git) удалить удаленную папку  
12. vadim@Raven:~/git_tutorial/work$ git remote add origin [https://github.com/VadMih/test2.git](https://github.com/VadMih/test2.git) добавить удаленную папку  
```